package com.yao.myioc.reader;

import com.yao.myioc.registry.BeanDefinitionRegistry;
import com.yao.myioc.resource.Resource;
import com.yao.myioc.utils.DocumentReader;
import org.dom4j.Document;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author yao
 */
public class XmlBeanDefinitionReader {

    /**
     * BeanDefinitionRegistry负责对BeanDefinition的管理和注册
     */
    private BeanDefinitionRegistry beanDefinitionRegistry;

    /**
     * 通过构造方法注入BeanDefinitionRegistry
     *
     * @param beanDefinitionRegistry
     */
    public XmlBeanDefinitionReader(BeanDefinitionRegistry beanDefinitionRegistry) {
        this.beanDefinitionRegistry = beanDefinitionRegistry;
    }

    /**
     * 通过加载XML配置文件，完成BeanDefinition的加载注册流程
     *
     * @param resource
     */
    public void loadBeanDefinitions(Resource resource) {
        InputStream inputStream = null;
        try {
            // 从资源对象中回去数据流
            inputStream = resource.getResourceAsStream();
            // 根据流创建Document对象
            Document document = DocumentReader.createDocument(inputStream);
            // 通过XmlBeanDefinitionDocumentReader完成对Document对象的解析
            XmlBeanDefinitionDocumentReader documentReader = new XmlBeanDefinitionDocumentReader(beanDefinitionRegistry);
            assert document != null;
            documentReader.loadBeanDefinitions(document.getRootElement());
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }


}
